/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sp2p.peerToPeer.servidor;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import sp2p.Compartilhador;
import sp2p.peerToPeer.Peer;
import sp2p.util.SendViaTCP;

/**
 *
 * @author anderson
 */
public class Servidor implements Runnable {

    private Integer id;
    private ServerSocket servidor;
    private Socket cliente;
    private Peer peer;
    private int porta = 1235;
    private String ip;

    public Servidor(Peer peer) {
        this.peer = peer;
    }

    public void registrarNaRedeP2P() {
        Compartilhador.numeroDeServidores++;
        System.out.println(this.getPeer().getNomePeer() + " ladoServidor diz: tem " + Compartilhador.numeroDeServidores + " servidores na rede...");
    }

    public void run() {
        try {
            setServidor(new ServerSocket(getPorta()));
            setIp(InetAddress.getLocalHost().toString());
            while (true) {
                System.out.println("[Servidor operando na porta " + getPorta() + "...]");
                System.out.println("[Esperando conexao...]");
                registrarNaRedeP2P();
                setCliente(getServidor().accept());
                System.out.println("Cliente: " + getCliente().getInetAddress() + " --- conectado...");
            //aguardar pedido de arquivo do cliente
            }
        } catch (IOException ex) {
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @return the id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId() {
        id++;
    }

    /**
     * @return the peer
     */
    public Peer getPeer() {
        return peer;
    }

    /**
     * @param peer the peer to set
     */
    public void setPeer(Peer peer) {
        this.peer = peer;
    }

    /**
     * @return the porta
     */
    public int getPorta() {
        return porta;
    }

    /**
     * @param porta the porta to set
     */
    public void setPorta(int porta) {
        this.porta = porta;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    /**
     * @return the servidor
     */
    public ServerSocket getServidor() {
        return servidor;
    }

    /**
     * @param servidor the servidor to set
     */
    public void setServidor(ServerSocket servidor) {
        this.servidor = servidor;
    }

    /**
     * @return the cliente
     */
    public Socket getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Socket cliente) {
        this.cliente = cliente;
    }
}
